/*
 * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package com.sun.corba.se.impl.orbutil;

import java.util.ArrayList;

/**
 * Utility for managing mappings from densely allocated integer
 * keys to arbitrary objects.  This should only be used for
 * keys in the range 0..max such that "most" of the key space is actually
 * used.
 */
public class DenseIntMapImpl {
    private ArrayList list = new ArrayList();

    private void checkKey(int key) {
        if (key < 0)
            throw new IllegalArgumentException("Key must be >= 0.");
    }

    /**
     * If key >= 0, return the value bound to key, or null if none.
     * Throws IllegalArgumentException if key <0.
     */
    public Object get(int key) {
        checkKey(key);

        Object result = null;
        if (key < list.size())
            result = list.get(key);

        return result;
    }

    /**
     * If key >= 0, bind value to the key.
     * Throws IllegalArgumentException if key <0.
     */
    public void set(int key, Object value) {
        checkKey(key);
        extend(key);
        list.set(key, value);
    }

    private void extend(int index) {
        if (index >= list.size()) {
            list.ensureCapacity(index + 1);
            int max = list.size();
            while (max++ <= index)
                list.add(null);
        }
    }
}
